package com.boomshake.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.boomshake.entity.DistributorRelation;
import com.boomshake.vo.DistributorTreeVO;
import com.boomshake.vo.DistributorVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 分销员关系Mapper接口
 */
@Mapper
public interface DistributorRelationMapper extends BaseMapper<DistributorRelation> {

    /**
     * 查询分销员树形结构数据
     * @param storeId 门店ID（可选）
     * @param level 分销等级（可选）
     * @param status 状态（可选）
     * @return 分销员树形数据列表
     */
    List<DistributorTreeVO> selectDistributorTreeData(@Param("storeId") Long storeId,
                                                       @Param("level") Integer level,
                                                       @Param("status") Integer status);

    /**
     * 查询分销员详情（包含用户信息和门店信息）
     * @param distributorId 分销员ID
     * @return 分销员详情
     */
    DistributorTreeVO selectDistributorDetail(@Param("distributorId") Long distributorId);

    /**
     * 查询分销员的下级数量
     * @param distributorId 分销员ID
     * @return 下级数量映射 (直接下级数量, 总下级数量)
     */
    Map<String, Integer> selectSubordinateCounts(@Param("distributorId") Long distributorId);

    /**
     * 查询分销员的佣金余额
     * @param distributorId 分销员ID
     * @return 佣金余额
     */
    BigDecimal selectCommissionBalance(@Param("distributorId") Long distributorId);

    /**
     * 查询分销员统计信息
     * @param storeId 门店ID（可选）
     * @param level 分销等级（可选）
     * @param status 状态（可选）
     * @return 统计信息映射
     */
    Map<String, Object> selectDistributorStatistics(@Param("storeId") Long storeId,
                                                     @Param("level") Integer level,
                                                     @Param("status") Integer status);

    /**
     * 更新分销员状态
     * @param distributorId 分销员ID
     * @param status 状态
     * @return 影响行数
     */
    int updateDistributorStatus(@Param("distributorId") Long distributorId,
                                 @Param("status") Integer status);
                                 
    /**
     * 查询上级分销员信息
     * @param parentId 上级分销员ID
     * @return 分销员信息
     */
    Map<String, Object> selectParentInfo(@Param("parentId") Long parentId);
    
    /**
     * 查询最大右值
     * @return 最大右值
     */
    Integer selectMaxRightValue();
    
    /**
     * 更新右值
     * @param rightValue 基准右值
     * @return 影响行数
     */
    int updateRightValues(@Param("rightValue") Integer rightValue);

    /**
     * 根据门店ID获取分销员列表
     * 
     * @param storeId 门店ID
     * @return 分销员列表
     */
    List<DistributorVO> getDistributorsByStoreId(Long storeId);

    /**
     * 查询所有分销员的用户ID
     * 
     * @return 分销员用户ID列表
     */
    List<Long> selectUserIds();
} 